home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / PASCAL / ALLSWAGS.ZIP / SWAGG-M.ZIP / MISC.SWG / 0193_Progress Bar for TechnoJock Toolkit.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-11-29  |  3.9 KB  |  162 lines

  1.  
  2. {
  3.  Since I received the request I post the following TOT (TechnoJock)  snippet.
  4.  The  object in the code below is a window with progress bar.
  5.  The object is very simple so I didn't comment the source.
  6.  I did include an example.
  7.  
  8.  Here we go :
  9. }
  10.  
  11.  {==========================================================================}
  12.  {= Unit name      : TotPro                                                =}
  13.  {= Version        : 1.0                                                   =}
  14.  {= Public Objects : ProcessOBJ                                            =}
  15.  {===--------------------------------------------------------------------===}
  16.  {= Programmer     : Sergey Perevoznik                                     =}
  17.  {                   root@pcb.chernigov.ua                                  }
  18.  {= Language       : Borland Pascal 7.0                                    =}
  19.  {===--------------------------------------------------------------------===}
  20.  
  21. Unit TotPro;
  22.  
  23. Interface
  24.  
  25. Uses
  26. TotStr,
  27. TotFast,
  28. TotWin;
  29.  
  30. Type
  31.        ProcessOBJ = object
  32.           vWinPtr        : WinPtr;
  33.           ScaleSym       : char;
  34.           DoneSym        : char;
  35.           ScaleCol       : byte;
  36.           DoneCol        : byte;
  37.           OneStep        : real;
  38.           CountCycle     : longint;
  39.           ScaleLen       : byte;
  40.           OldX           : byte;
  41.           InitVal,
  42.           DoneVal        : longInt;
  43.           Currentpercent : byte;
  44.  
  45.           Constructor Init(InitValue, EndValue : longint;
  46.                            Title : string);
  47.           Procedure   SetScale(ScaleSymbol,
  48.                                DoneSymbol : char;
  49.                                ScaleColor,
  50.                                DoneColor   : byte);
  51.           Procedure  Run;
  52.           Procedure  UpDate;
  53.           Destructor Done;
  54.        end;
  55.  
  56. Implementation
  57.  
  58.  
  59. Function  FillCh(Sym:Char;L:Byte):String;  Assembler;
  60. ASM
  61.  PUSH DS
  62.  LES   DI,@Result
  63.  XOR  CX,CX
  64.  MOV   CL,L
  65.  CMP   CL,0
  66.  MOV AL,CL
  67.  STOSB
  68.  MOV CL,AL
  69.  JE  @@1
  70.  MOV   AL,SYM
  71.  CLD
  72.  REP   STOSB
  73. @@1:
  74.  POP DS
  75. end;
  76.  
  77.  
  78.  Constructor ProcessOBJ.Init(InitValue, EndValue : longint;
  79.                            Title : string);
  80.   begin
  81.      New(vWinPtr,Init);
  82.      vWinPtr^.SetTitle(Title);
  83.      vWinPtr^.SetSize(15,8,65,12,2);
  84.      vWinPtr^.SetColors($70,$70,$70,$70);
  85.      ScaleSym := '░';
  86.      DoneSym  := '█';
  87.      ScaleCol := $07;
  88.      DoneCol  := $70;
  89.      OldX     := 2;
  90.      initVal  := InitValue;
  91.      DoneVal  := EndValue;
  92.      CurrentPercent := 0;
  93.      CountCycle := 0;
  94.   end;
  95.  
  96.  
  97.   Procedure ProcessOBJ.SetScale(ScaleSymbol,
  98.                      DoneSymbol : char;
  99.                      ScaleColor,
  100.                      DoneColor   : byte);
  101.   begin
  102.     ScaleSym := ScaleSymbol;
  103.     DoneSym  := DoneSymbol;
  104.     ScaleCol := ScaleColor;
  105.     DoneCol  := DoneColor;
  106.   end;
  107.  
  108.  
  109.   Procedure ProcessOBJ.Run;
  110.     begin
  111.  
  112.        vWinPtr^.Draw;
  113.        ScaleLen := vWinPtr^.vBorder.X2 - vWinPtr^.vBorder.X1 - 8;
  114.        Screen.WriteAT(2,2,ScaleCol,FillCh(ScaleSym,ScaleLen));
  115.        OneStep := (DoneVal - Initval) / 100;
  116.     end;
  117.  
  118.   Procedure ProcessOBJ.Update;
  119.     var
  120.     Cp1 : byte;
  121.     begin
  122.        Inc(CountCycle);
  123.        Cp1 := Round(CountCycle/OneStep);
  124.        if Cp1 > CurrentPercent then CurrentPercent := Cp1;
  125.        Screen.WriteAT(2,2,DoneCol,FillCH(DoneSym,trunc(CurrentPercent*ScaleLen/100)));
  126.        Screen.WriteAT(vWinPtr^.vBorder.X2 - vWinPtr^.vBorder.X1- 5,2,
  127.        DoneCol,intTostr(CurrentPercent) + '%');
  128.     end;
  129.  
  130.   Destructor ProcessOBJ.Done;
  131.     begin
  132.       Dispose(vWinPtr,done);
  133.     end;
  134. end.
  135.  
  136. {
  137. Program Example;
  138.  
  139. Uses TotPro,
  140.      TotFast,
  141.      CRT;
  142.  
  143. Var
  144.    Process : ProcessOBJ;
  145.    I       : integer;
  146. begin
  147.   ClrScr;
  148.   Screen.CursOFF;
  149.   Process.Init(0,80,'TOT Process Example');
  150.   Process.Run;
  151.   For I := 1 to 80 do
  152.     begin
  153.       Process.Update;
  154.       Delay(30);
  155.     end;
  156.   Process.Done;
  157.   Screen.CursON;
  158. end.
  159.  
  160. }
  161.  
  162.